package com.myjava.myannotation;

import java.lang.reflect.Field;

/**
 * @Auther: fant
 * @Date: 2018/9/13 13:12
 * @Description:
 */

public class CheckParamUtil {
    public static void checkParam(Object o) throws Exception {
        out:
        {
            final Class<?> objClass = o.getClass();
            Field[] farray = objClass.getDeclaredFields();//获取所有字段  包括private 不包括父类字段
            Class<CheckString> chkString = CheckString.class;//CheckString的class
            for (int i = 0; i < farray.length; i++) {
                Field field = farray[i];//获取其中字段
                String fieldName = field.getName();//获取字段名称
                if (field.isAnnotationPresent(chkString)) {//判断是否被chkstring注解所标识
                    //如果被标识
                    CheckString chk = field.getAnnotation(chkString);// 返回这个类所标识的注解对象
                    Exists e = chk.exists();  //获取字段是否需要填写
                    //获得字段的值
                    field.setAccessible(true);//private字段要设置为true才可以获取值或者修改值
                    String fValue = (String) field.get(o);
                    if (e == Exists.Required) {//如果字段是必须填写
                        if (fValue == null || fValue.equals("")) {
                            //如果字段是为空
                            System.out.println(objClass.getSimpleName() + "." + fieldName + "必须填写");
                            break out;
                        }
                    }
                }
            }
        }
    }
}